﻿package com.util.asyncPost;

import java.util.List;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.JsonElement;

/**
 * 可直接在UI线程中使用的网络请求。
 * 注意：AsyncRequestThread中的analysisResponse方法需要根据各自的需要进行解析。
 * 注意：添加网络访问权限
 * 
 * @author 拉风的道长
 * 
 */
public abstract class BaseRequest {

	private AsyncRequestThread request;

	public BaseRequest() {
		AsyncHandler handler = new AsyncHandler(this);
		request = new AsyncRequestThread(AsyncClient.getHttpClient(), handler);
	}

	/**
	 * 设置网络请求地址
	 * 
	 * @param url
	 */
	public void setRequestUrl(String url) {
		request.setRequestUrl(url);
	}

	/**
	 * 增加网络请求参数
	 * 
	 * @param key
	 * @param value
	 */
	public void addRequestParams(String key, String value) {
		request.addRequestParams(key, value);
	}

	/**
	 * 增加网络请求参数，转化为json数据发送出去。
	 * 
	 * @param key
	 * @param value
	 */
	public void addRequestParams(String key, List<?> value) {
		String values = new Gson().toJson(value);
		request.addRequestParams(key, values);
	}

	/**
	 * 增加网络请求参数，转化为json数据发送出去。
	 * 
	 * @param key
	 * @param value
	 */
	public void addRequestParams(String key, Map<Object, Object> value) {
		String values = new Gson().toJson(value);
		request.addRequestParams(key, values);
	}

	/**
	 * 开始请求
	 * 
	 * @param key
	 * @param value
	 */
	public void startRequest() {
		request.startRequest();
	}

	/**
	 * 接受数据成功后，自动回调这个方法
	 */
	public abstract void onSuccess(JsonElement body);

	/**
	 * 接受数据失败或者出现异常，自动回调这个方法
	 */
	public abstract void onFail(String msg);

}
